package cn.zyl.demo.common.enums;

/**
 * RegexEnum枚举说明:常用的正则表达式
 *
 * @author wsz
 * @version v1.0
 * @date 2020-07-23
 */
public enum RegexEnum {
    /** 登录用户名：大小写字母开头，5-20位字符 */
    USER_NAME("^[a-zA-Z]\\w{5,20}$"),
    /** 普通密码：大小字母数字组合，6-20位*/
    PASS_WORD("^[a-zA-Z0-9]{6,20}$"),
    /** 普通邮箱emil */
    EMAIL("^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"),
    /** 汉字 */
    CHAR_CHINESE("^[\u4e00-\u9fa5],{0,}$"),
    /** 英文*/
    CHAR_EN("^[a-zA-Z]+$"),
    /** 由数字、26个英文字母或者下划线组成的字符串*/
    CHAR_EN1("^\\w+$"),
    /** 普通身份证号 */
    ID_CARD("(^\\d{15}$)|(^\\d{17}(X|\\d)$)"),
    /** 15位身份证号，6位地区码，2为年份，2位月，2位日期，3位顺序码*/
    ID_CARD_15("^\\d{6}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$"),
    /** 18位身份证号，6位地区码，4为年份，2位月，2位日期，3位顺序码-奇数男/偶数女，1位校验码*/
    ID_CARD_18("^\\d{6}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"),
    /**定义判别用户身份证号的正则表达式（15位或者18位，最后一位可以为字母）*/
    ID_CARD_STRICT("(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)"),
    /** 普通url */
    URL("http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?"),
    /** 数字：整数 */
    NUMBER("^(-)?[0-9]+$"),
    /** 数字：小数 decimal*/
    NUMBER_DECIMAL("^(-)?\\d+\\.\\d+$"),
    /** 数字：正数 */
    NUMBER_POSITIVE("^\\d+$"),
    /** 数字：负数 */
    NUMBER_NEGATIVE("^-\\d+$"),
    /** IP地址，普通验证*/
    IP("^(\\d{1,3}\\.){3}\\d{1,3}$"),
    /** IP地址，严格验证*/
    IP_STRICT("^((25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)\\.){3}(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)$"),
    /** 固定电话-验证没有区号的 */
    NO_AREA_CODE_FIXED_PHONE ( "^[1-9][0-9]{5,8}$"),
    /** 固定电话-验证带区号的 */
    AREA_CODE_FIXED_PHONE ( "^[0][1-9]{2,3}-[0-9]{5,8}$"),
    ;
    private final String regex;
    RegexEnum(String regex){ this.regex = regex; }
    public String getRegex() { return regex; }
    public boolean matches(String val){return null!=val && val.trim().length() > 0 && val.matches(regex);}
}
